package com.jintian.smart.kernel.core.domain;

import org.beetl.sql.core.page.PageResult;

import java.io.Serializable;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * 分页 Page 对象接口
 */
public interface IPage<T> extends Serializable {
    /**
     * 分页记录列表
     */
    List<T> getList();

    /**
     * 设置分页记录列表
     */
    void setList(List<T> datas);

    /**
     * 当前满足条件总行数
     */
    long getTotal();

    /**
     * 设置当前满足条件总行数
     */
    IPage<T> setTotal(long total);

    /**
     * 获取每页显示条数
     */
    long getSize();

    /**
     * 设置每页显示条数
     */
    IPage<T> setSize(int size);

    /**
     * 当前页
     */
    long getCurrent();

    /**
     * 设置当前页
     */
    IPage<T> setCurrent(long current);

    /**
     * 获取当前获取数据的行数
     */
    default int getCount() {
        if (getList() == null) {
            return 0;
        }
        return getList().size();
    }

    /**
     * 计算当前分页偏移量
     */
    default long offset() {
        long current = getCurrent();
        if (current <= 1L) {
            return 0L;
        }
        return Math.max((current - 1) * getSize(), 0L);
    }

    /**
     * 当前分页总页数
     */
    default long getPages() {
        if (getSize() == 0) {
            return 0L;
        }
        long pages = getTotal() / getSize();
        if (getTotal() % getSize() != 0) {
            pages++;
        }
        return pages;
    }
}
